# Вопросы для подготовки к Python Developer интервью

## Disclaimer

Ответы на вопросы собирал давно и с попеременным успехом.
Где-то могут быть неточности, где-то откровенный бред (особенно в разделе про БД). Источники также выбирались не очень переборчиво.
Часть ссылок на источники может быть не указана по причине забывчивости или просто случайно была утеряна.
Владелец этого репозитория не несет ответственности за ущерб причиненный содержимым этого репозитория,
работой Python-разработчика и работой как таковой.

## Собственно вопросы

[questions.md](questions.md)

## FAQ

### Что это?

Список вопросов для подготовки к интервью. Могут быть полезны как интервьюеру так и интервьюируемому

### Зачем?

Как-то увидел [статью](https://habr.com/ru/post/439576/) на Хабре где было много вопросов,
но практически не было ответов и не смог пройти мимо.

### Нашел ошибку/опечатку/бред в ответах или хочу добавить еще вопросов

Молодец, создавай PR.

- После того как что-то изменил в [questions.md](questions.md) запусти `make toc` чтобы обновить [Список вопросов](#Список-вопросов)
- Не забудь добавить себя в [metadata.txt](metadata.txt) в раздел `author`

### Не хочу читать в Markdown, хочу читать в электронной книге

Пожалуйста [releases](https://github.com/yakimka/python_interview_questions/releases)

## Список вопросов

<!-- toc -->

- [Python](questions.md/#Python)
  * [Последовательности](questions.md/#Последовательности)
    + [Что такое последовательность](questions.md/#Что-такое-последовательность)
    + [Какие операции поддерживают большинство последовательностей](questions.md/#Какие-операции-поддерживают-большинство-последовательностей)
    + [Какие виды строк бывают в питоне](questions.md/#Какие-виды-строк-бывают-в-питоне)
    + [Можно ли изменить отдельный символ внутри строки](questions.md/#Можно-ли-изменить-отдельный-символ-внутри-строки)
    + [Как соединить список строк в одну. Как разбить строку на список строк](questions.md/#Как-соединить-список-строк-в-одну-Как-разбить-строку-на-список-строк)
    + [Как кодировать и декодировать строки](questions.md/#Как-кодировать-и-декодировать-строки)
    + [Чем список отличается от кортежа](questions.md/#Чем-список-отличается-от-кортежа)
    + [Что такое диапазон](questions.md/#Что-такое-диапазон)
    + [Как сделать список уникальным (без повторяющихся элементов)](questions.md/#Как-сделать-список-уникальным-без-повторяющихся-элементов)
    + [Есть кортеж из трех элементов. Назначить переменным a, b, c его значения](questions.md/#Есть-кортеж-из-трех-элементов-Назначить-переменным-a-b-c-его-значения)
    + [Как сравниваются последовательности](questions.md/#Как-сравниваются-последовательности)
  * [Множества и отображения](questions.md/#Множества-и-отображения)
    + [Как понять хешируемый ли объект](questions.md/#Как-понять-хешируемый-ли-объект)
    + [Что такое множество](questions.md/#Что-такое-множество)
    + [Для чего применяются множества](questions.md/#Для-чего-применяются-множества)
    + [Какие операции можно производить над множествами](questions.md/#Какие-операции-можно-производить-над-множествами)
    + [Как происходит проверка множеств на равенство](questions.md/#Как-происходит-проверка-множеств-на-равенство)
    + [Что такое отображение](questions.md/#Что-такое-отображение)
    + [Какие нюансы есть в использовании чисел как ключей](questions.md/#Какие-нюансы-есть-в-использовании-чисел-как-ключей)
    + [Какие операции можно производить над отображениями](questions.md/#Какие-операции-можно-производить-над-отображениями)
    + [Что возвращает метод items](questions.md/#Что-возвращает-метод-items)
    + [Как отсортировать список словарей по определенному полю](questions.md/#Как-отсортировать-список-словарей-по-определенному-полю)
    + [Что может являться ключом словаря. Что не может. Почему](questions.md/#Что-может-являться-ключом-словаря-Что-не-может-Почему)
    + [Есть два списка – ключи и значения. Как составить из них словарь](questions.md/#Есть-два-списка--ключи-и-значения-Как-составить-из-них-словарь)
    + [Как работает хэш-таблица](questions.md/#Как-работает-хэш-таблица)
    + [Что такое коллизия](questions.md/#Что-такое-коллизия)
    + [Где будет быстрее поиск, а где перебор и почему: dict, list, set, tuple](questions.md/#Где-будет-быстрее-поиск-а-где-перебор-и-почему-dict-list-set-tuple)
  * [Функции](questions.md/#Функции)
    + [Что такое args, kwargs. В каких случаях они требуются](questions.md/#Что-такое-args-kwargs-В-каких-случаях-они-требуются)
    + [Почему использовать изменяемые объекты как параметры по-умолчанию плохо. Приведите пример плохого случая. Как исправить](questions.md/#Почему-использовать-изменяемые-объекты-как-параметры-по-умолчанию-плохо-Приведите-пример-плохого-случая-Как-исправить)
    + [Можно ли передавать функцию в качестве аргумента другой функции](questions.md/#Можно-ли-передавать-функцию-в-качестве-аргумента-другой-функции)
    + [Можно ли объявлять функцию внутри другой функции. Где она будет видна](questions.md/#Можно-ли-объявлять-функцию-внутри-другой-функции-Где-она-будет-видна)
    + [Что такое лямбды. Каковы их особенности](questions.md/#Что-такое-лямбды-Каковы-их-особенности)
    + [Допустимы ли следующие выражения](questions.md/#Допустимы-ли-следующие-выражения)
    + [Как передаются значения аргументов в функцию или метод](questions.md/#Как-передаются-значения-аргументов-в-функцию-или-метод)
    + [Что такое замыкание](questions.md/#Что-такое-замыкание)
  * [Итераторы и генераторы](questions.md/#Итераторы-и-генераторы)
    + [Что такое контейнер](questions.md/#Что-такое-контейнер)
    + [Что такое итерабельный объект](questions.md/#Что-такое-итерабельный-объект)
    + [Что такое итератор](questions.md/#Что-такое-итератор)
    + [Что такое генератор](questions.md/#Что-такое-генератор)
    + [Что такое генераторная функция](questions.md/#Что-такое-генераторная-функция)
    + [Что делает yield](questions.md/#Что-делает-yield)
    + [В чем отличие \[x for x in y\] от (x for x in y)](questions.md/#В-чем-отличие-x-for-x-in-y-от-x-for-x-in-y)
    + [Что особенного в генераторе](questions.md/#Что-особенного-в-генераторе)
    + [Как объявить генератор](questions.md/#Как-объявить-генератор)
    + [Как получить из генератора список](questions.md/#Как-получить-из-генератора-список)
    + [Что такое подгенератор](questions.md/#Что-такое-подгенератор)
    + [Какие методы есть у генераторов](questions.md/#Какие-методы-есть-у-генераторов)
    + [Можно ли извлечь элемент генератора по индексу](questions.md/#Можно-ли-извлечь-элемент-генератора-по-индексу)
    + [Что возвращает итерация по словарю](questions.md/#Что-возвращает-итерация-по-словарю)
    + [Как итерировать словарь по парам ключ-значение](questions.md/#Как-итерировать-словарь-по-парам-ключ-значение)
    + [Что такое сопрограмма](questions.md/#Что-такое-сопрограмма)
  * [Классы, объекты](questions.md/#Классы-объекты)
    + [Как получить список атрибутов объекта](questions.md/#Как-получить-список-атрибутов-объекта)
    + [Что такое магические методы, для чего нужны](questions.md/#Что-такое-магические-методы-для-чего-нужны)
    + [Как в классе сослаться на родительский класс](questions.md/#Как-в-классе-сослаться-на-родительский-класс)
    + [Возможно ли множественное наследование](questions.md/#Возможно-ли-множественное-наследование)
    + [Что такое MRO](questions.md/#Что-такое-MRO)
    + [Что такое Diamond problem](questions.md/#Что-такое-Diamond-problem)
    + [Что такое миксины](questions.md/#Что-такое-миксины)
    + [Что такое контекстный менеджер. Как написать свой](questions.md/#Что-такое-контекстный-менеджер-Как-написать-свой)
    + [Прокомментировать выражение](questions.md/#Прокомментировать-выражение)
    + [Что такое \_\_slots\_\_. Плюсы, минусы](questions.md/#Что-такое-__slots__-Плюсы-минусы)
    + [В чем смысл параметров _value, __value](questions.md/#В-чем-смысл-параметров-_value-__value)
    + [Что такое \_\_new\_\_. И чем он отличается от \_\_init\_\_. В какой последовательности они выполняются](questions.md/#Что-такое-__new__-И-чем-он-отличается-от-__init__-В-какой-последовательности-они-выполняются)
    + [Что такое и чем отличается old-style от new-style classes](questions.md/#Что-такое-и-чем-отличается-old-style-от-new-style-classes)
    + [Что такое утиная типизация](questions.md/#Что-такое-утиная-типизация)
  * [Модули, пакеты](questions.md/#Модули-пакеты)
    + [Что такое модуль](questions.md/#Что-такое-модуль)
    + [Как можно получить имя модуля](questions.md/#Как-можно-получить-имя-модуля)
    + [Что такое модульное программирование](questions.md/#Что-такое-модульное-программирование)
    + [Как Python ищет модули при импорте](questions.md/#Как-Python-ищет-модули-при-импорте)
    + [Что такое пакет](questions.md/#Что-такое-пакет)
    + [Что вы можете сказать о конструкции import package.item](questions.md/#Что-вы-можете-сказать-о-конструкции-import-packageitem)
  * [Исключения](questions.md/#Исключения)
    + [Что такое обработка исключений](questions.md/#Что-такое-обработка-исключений)
    + [Для чего могут применять конструкцию try finally без except](questions.md/#Для-чего-могут-применять-конструкцию-try-finally-без-except)
    + [Как правильно по-разному обрабатывать исключения](questions.md/#Как-правильно-по-разному-обрабатывать-исключения)
    + [Что будет если ошибку не обработает блок except](questions.md/#Что-будет-если-ошибку-не-обработает-блок-except)
    + [Что делать если нужно перехватить исключение, выполнить действия и опять возбудить это же исключение](questions.md/#Что-делать-если-нужно-перехватить-исключение-выполнить-действия-и-опять-возбудить-это-же-исключение)
    + [Что такое сцепление исключений](questions.md/#Что-такое-сцепление-исключений)
    + [Зачем нужен блок else](questions.md/#Зачем-нужен-блок-else)
    + [Что можно передать в конструктор исключения](questions.md/#Что-можно-передать-в-конструктор-исключения)
    + [Какие есть классы исключений](questions.md/#Какие-есть-классы-исключений)
    + [В каких случаях можно обработать SyntaxError](questions.md/#В-каких-случаях-можно-обработать-SyntaxError)
    + [Можно ли создавать собственные исключения](questions.md/#Можно-ли-создавать-собственные-исключения)
    + [Для чего нужны предупреждения (warnings) и как создать собственное](questions.md/#Для-чего-нужны-предупреждения-warnings-и-как-создать-собственное)
    + [Для чего нужен модуль warning](questions.md/#Для-чего-нужен-модуль-warning)
  * [Декораторы](questions.md/#Декораторы)
    + [Что такое декораторы. Зачем нужны](questions.md/#Что-такое-декораторы-Зачем-нужны)
    + [Что может быть декоратором. К чему может быть применен декоратор](questions.md/#Что-может-быть-декоратором-К-чему-может-быть-применен-декоратор)
    + [Что будет, если декоратор не возвращает ничего](questions.md/#Что-будет-если-декоратор-не-возвращает-ничего)
    + [В чем отличие \@foobar от \@foobar()](questions.md/#В-чем-отличие-foobar-от-foobar)
    + [Что такое фабрика декораторов](questions.md/#Что-такое-фабрика-декораторов)
    + [Зачем нужен wraps](questions.md/#Зачем-нужен-wraps)
  * [Метаклассы](questions.md/#Метаклассы)
    + [Что такое метаклассы](questions.md/#Что-такое-метаклассы)
    + [Что такое type. Как работает поиск метакласса при создании объекта](questions.md/#Что-такое-type-Как-работает-поиск-метакласса-при-создании-объекта)
    + [Как работают метаклассы](questions.md/#Как-работают-метаклассы)
    + [Зачем вообще использовать метаклассы](questions.md/#Зачем-вообще-использовать-метаклассы)
  * [Ввод-Вывод](questions.md/#Ввод-Вывод)
    + [Что такое файловый объект](questions.md/#Что-такое-файловый-объект)
    + [Какие есть виды файловых объектов](questions.md/#Какие-есть-виды-файловых-объектов)
    + [В чем отличие текстовых и бинарных файлов](questions.md/#В-чем-отличие-текстовых-и-бинарных-файлов)
    + [Как пользоваться функцией open](questions.md/#Как-пользоваться-функцией-open)
    + [Для чего необходимо закрывать файлы](questions.md/#Для-чего-необходимо-закрывать-файлы)
    + [Что делают методы tell и seek](questions.md/#Что-делают-методы-tell-и-seek)
    + [Что делают StringIO и BytesIO](questions.md/#Что-делают-StringIO-и-BytesIO)
    + [Являются ли файловые объекты контекстными менеджерами](questions.md/#Являются-ли-файловые-объекты-контекстными-менеджерами)
    + [Что такое сериализация](questions.md/#Что-такое-сериализация)
    + [json.dumps / json.dump , json.loads / json.load](questions.md/#jsondumps--jsondump--jsonloads--jsonload)
    + [Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json](questions.md/#Что-делать-если-нужно-сериализовать-данные-которые-не-поддерживаются-стандартным-модулем-json)
    + [pickle.dumps / pickle.dump, pickle.loads / pickle.load](questions.md/#pickledumps--pickledump-pickleloads--pickleload)
  * [Тестирование](questions.md/#Тестирование)
    + [Пирамида тестирования](questions.md/#Пирамида-тестирования)
    + [Что такое mocking](questions.md/#Что-такое-mocking)
    + [Что делать, если тестируемая функция использует удалённое подключение к внешним сервисам, которое иногда видает ошибку таймаута, 404 и им подобные](questions.md/#Что-делать-если-тестируемая-функция-использует-удалённое-подключение-к-внешним-сервисам-которое-иногда-видает-ошибку-таймаута-404-и-им-подобные)
    + [Что делать, если тестируемая функция занимает много времени на выполнение повторяющихся операций внутри неё](questions.md/#Что-делать-если-тестируемая-функция-занимает-много-времени-на-выполнение-повторяющихся-операций-внутри-неё)
    + [Какие вы знаете виды тестов](questions.md/#Какие-вы-знаете-виды-тестов)
      - [Unit-тесты](questions.md/#Unit-тесты)
      - [Интеграционные тесты (Integration tests)](questions.md/#Интеграционные-тесты-Integration-tests)
      - [Функциональное тестирование](questions.md/#Функциональное-тестирование)
      - [Системный тест (System test, Service test)](questions.md/#Системный-тест-System-test-Service-test)
      - [Проверка работоспособности (Smoke test, Sanity check)](questions.md/#Проверка-работоспособности-Smoke-test-Sanity-check)
      - [Регрессионное тестирование (Regression testing)](questions.md/#Регрессионное-тестирование-Regression-testing)
      - [Прочее](questions.md/#Прочее)
    + [Чем интеграционное тестирование отличается от функционального](questions.md/#Чем-интеграционное-тестирование-отличается-от-функционального)
  * [Функциональное программирование](questions.md/#Функциональное-программирование)
    + [Что такое функциональное программирование](questions.md/#Что-такое-функциональное-программирование)
    + [Как у Python с поддержкой функционального программирования](questions.md/#Как-у-Python-с-поддержкой-функционального-программирования)
    + [Что такое объект первого класса](questions.md/#Что-такое-объект-первого-класса)
    + [Что такое функция высшего порядка](questions.md/#Что-такое-функция-высшего-порядка)
    + [Что такое каррирование](questions.md/#Что-такое-каррирование)
    + [Опишите функции map, reduce, filter модуля functools](questions.md/#Опишите-функции-map-reduce-filter-модуля-functools)
    + [Какие еще вы знаете функции из модуля functools](questions.md/#Какие-еще-вы-знаете-функции-из-модуля-functools)
    + [Какие вы функции знаете из модуля itertools](questions.md/#Какие-вы-функции-знаете-из-модуля-itertools)
    + [Для чего нужен модуль operator](questions.md/#Для-чего-нужен-модуль-operator)
  * [GIL, потоки, процессы](questions.md/#GIL-потоки-процессы)
    + [Что такое GIL. Какие у него есть проблемы](questions.md/#Что-такое-GIL-Какие-у-него-есть-проблемы)
    + [Работали ли Вы с asyncio. В чём его особенность](questions.md/#Работали-ли-Вы-с-asyncio-В-чём-его-особенность)
    + [Что такое async/await, для чего они нужны и как их использовать](questions.md/#Что-такое-asyncawait-для-чего-они-нужны-и-как-их-использовать)
    + [Как в питоне реализуется многопоточность. Какими модулями](questions.md/#Как-в-питоне-реализуется-многопоточность-Какими-модулями)
    + [В чем отличие тредов от мультипроцессинга](questions.md/#В-чем-отличие-тредов-от-мультипроцессинга)
    + [Какие задачи хорошо параллелятся, какие плохо](questions.md/#Какие-задачи-хорошо-параллелятся-какие-плохо)
    + [Нужно посчитать 100 уравнений. Делать это в тредах или нет](questions.md/#Нужно-посчитать-100-уравнений-Делать-это-в-тредах-или-нет)
    + [Треды в Питоне — это нативные треды или нет](questions.md/#Треды-в-Питоне--это-нативные-треды-или-нет)
    + [Что такое гринлеты. Общее понятие. Примеры реализаций](questions.md/#Что-такое-гринлеты-Общее-понятие-Примеры-реализаций)
  * [Какие варианты реализации шаблона Singleton на питоне](questions.md/#Какие-варианты-реализации-шаблона-Singleton-на-питоне)
  * [Какие вы знаете инструменты для проверки кодстайл](questions.md/#Какие-вы-знаете-инструменты-для-проверки-кодстайл)
  * [Что такое list/dict comprehension](questions.md/#Что-такое-listdict-comprehension)
  * [Какая разница между одинарным и двойным подчеркиванием](questions.md/#Какая-разница-между-одинарным-и-двойным-подчеркиванием)
  * [Отличие copy() от deepcopy()](questions.md/#Отличие-copy-от-deepcopy)
  * [Что такое garbage collector. В чём его плюсы и минусы](questions.md/#Что-такое-garbage-collector-В-чём-его-плюсы-и-минусы)
  * [Что такое интроспекция](questions.md/#Что-такое-интроспекция)
  * [Что такое рефлексия](questions.md/#Что-такое-рефлексия)
- [Django](questions.md/#Django)
  * [Что такое Middleware, для чего, как реализуется](questions.md/#Что-такое-Middleware-для-чего-как-реализуется)
  * [Назовите основные мидлвари. Зачем они нужны](questions.md/#Назовите-основные-мидлвари-Зачем-они-нужны)
  * [Опишите алгоритм работы CSRF middleware](questions.md/#Опишите-алгоритм-работы-CSRF-middleware)
  * [Что такое сигналы? Зачем нужны? Назовите основные](questions.md/#Что-такое-сигналы-Зачем-нужны-Назовите-основные)
  * [Как реализуется связь m2m на уровне базы данных](questions.md/#Как-реализуется-связь-m2m-на-уровне-базы-данных)
  * [Чем лучше отправлять форму — GET или POST](questions.md/#Чем-лучше-отправлять-форму--GET-или-POST)
  * [Как работает Serializer в Django REST Framework](questions.md/#Как-работает-Serializer-в-Django-REST-Framework)
  * [Что такое Meta в классах Django и для чего нужен](questions.md/#Что-такое-Meta-в-классах-Django-и-для-чего-нужен)
  * [За что отвечает Meta в сериализаторе](questions.md/#За-что-отвечает-Meta-в-сериализаторе)
  * [Какая разница в быстродействии между django и Flask (и почему)](questions.md/#Какая-разница-в-быстродействии-между-django-и-Flask-и-почему)
  * [Как в django работает система аутентификации](questions.md/#Как-в-django-работает-система-аутентификации)
- [Веб-разработка](questions.md/#Веб-разработка)
  * [Что такое CGI. Плюсы, минусы](questions.md/#Что-такое-CGI-Плюсы-минусы)
  * [Как защитить куки от воровства и от подделки](questions.md/#Как-защитить-куки-от-воровства-и-от-подделки)
  * [Какая разница между аутентификацией и авторизацией](questions.md/#Какая-разница-между-аутентификацией-и-авторизацией)
  * [Что такое XSS. Примеры. Как защитить приложение](questions.md/#Что-такое-XSS-Примеры-Как-защитить-приложение)
  * [REST & SOAP](questions.md/#REST--SOAP)
    + [Что такое REST](questions.md/#Что-такое-REST)
    + [Что такое SOAP](questions.md/#Что-такое-SOAP)
    + [В чем разница между REST и SOAP веб сервисами](questions.md/#В-чем-разница-между-REST-и-SOAP-веб-сервисами)
    + [Можем ли мы посылать SOAP сообщения с вложением](questions.md/#Можем-ли-мы-посылать-SOAP-сообщения-с-вложением)
    + [Как бы вы решили какой из REST или SOAP веб сервисов использовать](questions.md/#Как-бы-вы-решили-какой-из-REST-или-SOAP-веб-сервисов-использовать)
  * [Какие способы для мониторинга веб-приложений в production вы использовали или знаете](questions.md/#Какие-способы-для-мониторинга-веб-приложений-в-production-вы-использовали-или-знаете)
- [HTTP](questions.md/#HTTP)
  * [Как устроен протокол HTTP](questions.md/#Как-устроен-протокол-HTTP)
  * [Написать raw запрос главной Яндекса](questions.md/#Написать-raw-запрос-главной-Яндекса)
  * [Как клиенту понять, удался запрос или нет](questions.md/#Как-клиенту-понять-удался-запрос-или-нет)
  * [Что нужно отправить браузеру, чтобы перенаправить на другую страницу](questions.md/#Что-нужно-отправить-браузеру-чтобы-перенаправить-на-другую-страницу)
  * [Как управлять кешированием в HTTP](questions.md/#Как-управлять-кешированием-в-HTTP)
  * [Как кэшируются файлы на уровне протокола](questions.md/#Как-кэшируются-файлы-на-уровне-протокола)
  * [Что такое HTTP](questions.md/#Что-такое-HTTP)
  * [Чем отличаются HTTP и HTTPS](questions.md/#Чем-отличаются-HTTP-и-HTTPS)
- [Общее](questions.md/#Общее)
  * [ООП](questions.md/#ООП)
    + [Инкапсуляция](questions.md/#Инкапсуляция)
    + [Наследование](questions.md/#Наследование)
    + [Полиморфизм](questions.md/#Полиморфизм)
    + [Абстракция](questions.md/#Абстракция)
  * [Какие принципы программирования вы знаете](questions.md/#Какие-принципы-программирования-вы-знаете)
    + [KISS](questions.md/#KISS)
    + [DRY](questions.md/#DRY)
    + [YAGNI](questions.md/#YAGNI)
    + [SLAP](questions.md/#SLAP)
    + [SOLID принципы](questions.md/#SOLID-принципы)
  * [Что такое code cohesion & code coupling](questions.md/#Что-такое-code-cohesion--code-coupling)
  * [Какие шаблоны проектирования вы знаете](questions.md/#Какие-шаблоны-проектирования-вы-знаете)
    + [Порождающие (Creational)](questions.md/#Порождающие-Creational)
      - [Абстрактная фабрика (Abstract factory)](questions.md/#Абстрактная-фабрика-Abstract-factory)
      - [Построитель (Builder)](questions.md/#Построитель-Builder)
      - [Фабричный метод (Factory method)](questions.md/#Фабричный-метод-Factory-method)
      - [Прототип (Prototype)](questions.md/#Прототип-Prototype)
      - [Одиночка (Singleton)](questions.md/#Одиночка-Singleton)
      - [Порождающие паттерны. Итог](questions.md/#Порождающие-паттерны-Итог)
    + [Структурные (Structural)](questions.md/#Структурные-Structural)
      - [Адаптер (Adapter)](questions.md/#Адаптер-Adapter)
      - [Мост (Bridge)](questions.md/#Мост-Bridge)
      - [Компоновщик (Composite)](questions.md/#Компоновщик-Composite)
      - [Декоратор (Decorator)](questions.md/#Декоратор-Decorator)
      - [Фасад (Facade)](questions.md/#Фасад-Facade)
      - [Приспособленец (Flyweight)](questions.md/#Приспособленец-Flyweight)
      - [Заместитель (Proxy)](questions.md/#Заместитель-Proxy)
      - [Структурные паттерны. Итог](questions.md/#Структурные-паттерны-Итог)
    + [Поведенческие (Behavioral)](questions.md/#Поведенческие-Behavioral)
      - [Цепочка ответственности (Chain of responsobility)](questions.md/#Цепочка-ответственности-Chain-of-responsobility)
      - [Команда (Command)](questions.md/#Команда-Command)
      - [Интерпретатор (Interpreter)](questions.md/#Интерпретатор-Interpreter)
      - [Итератор (Iterator)](questions.md/#Итератор-Iterator)
      - [Посредник (Mediator)](questions.md/#Посредник-Mediator)
      - [Хранитель (Memento)](questions.md/#Хранитель-Memento)
      - [Наблюдатель (Observer)](questions.md/#Наблюдатель-Observer)
      - [Состояние (State)](questions.md/#Состояние-State)
      - [Стратегия (Strategy)](questions.md/#Стратегия-Strategy)
      - [Шаблонный метод (Template method)](questions.md/#Шаблонный-метод-Template-method)
      - [Посетитель (Visitor)](questions.md/#Посетитель-Visitor)
      - [Поведенческие паттерны. Итог](questions.md/#Поведенческие-паттерны-Итог)
  * [Что такое lru cache](questions.md/#Что-такое-lru-cache)
  * [Что такое MQ](questions.md/#Что-такое-MQ)
  * [Какие готовые реализации MQ вы знаете](questions.md/#Какие-готовые-реализации-MQ-вы-знаете)
  * [Что такое RPC](questions.md/#Что-такое-RPC)
  * [Что такое gPRC](questions.md/#Что-такое-gPRC)
- [Алгоритмы, структуры](questions.md/#Алгоритмы-структуры)
  * [Что такое рекурсия. Какие минусы, плюсы](questions.md/#Что-такое-рекурсия-Какие-минусы-плюсы)
  * [Что такое хвостовая рекурсия](questions.md/#Что-такое-хвостовая-рекурсия)
  * [Как можно оптимизировать хвостовую рекурсию в Python](questions.md/#Как-можно-оптимизировать-хвостовую-рекурсию-в-Python)
  * [О-большое при оценке сложности](questions.md/#О-большое-при-оценке-сложности)
  * [Простой поиск](questions.md/#Простой-поиск)
  * [Бинарный поиск](questions.md/#Бинарный-поиск)
  * [Рекурсивные алгоритмы](questions.md/#Рекурсивные-алгоритмы)
  * [Быстрая сортировка](questions.md/#Быстрая-сортировка)
  * [Граф](questions.md/#Граф)
  * [Очередь и стек](questions.md/#Очередь-и-стек)
  * [Дерево](questions.md/#Дерево)
  * [Поиск в ширину](questions.md/#Поиск-в-ширину)
  * [Алгоритм Дейкстры](questions.md/#Алгоритм-Дейкстры)
  * [Жадные алгоритмы](questions.md/#Жадные-алгоритмы)
  * [Как распознать NP-полную задачу](questions.md/#Как-распознать-NP-полную-задачу)
  * [Динамическое программирование](questions.md/#Динамическое-программирование)
  * [Алгоритм k ближайших соседей](questions.md/#Алгоритм-k-ближайших-соседей)
  * [Алгоритм Ричарда Фейнмана](questions.md/#Алгоритм-Ричарда-Фейнмана)
- [Frontend](questions.md/#Frontend)
  * [Что такое куки. Зачем они, как с ними работать и где они сохраняются](questions.md/#Что-такое-куки-Зачем-они-как-с-ними-работать-и-где-они-сохраняются)
  * [Может ли сервер изменить (добавить, удалить) куки](questions.md/#Может-ли-сервер-изменить-добавить-удалить-куки)
  * [Что такое JWT (JSON Web Token)](questions.md/#Что-такое-JWT-JSON-Web-Token)
- [SDLC](questions.md/#SDLC)
  * [Agile/Scrum](questions.md/#AgileScrum)
  * [Какая разница между CI и CD](questions.md/#Какая-разница-между-CI-и-CD)
  * [Какая разница между Scrum и Kanban](questions.md/#Какая-разница-между-Scrum-и-Kanban)
  * [Вопрос для тим-лидов: что Вы будете делать, если на проекте нет тестов и заказчик не хочет тратить на их разработку время и деньги](questions.md/#Вопрос-для-тим-лидов-что-Вы-будете-делать-если-на-проекте-нет-тестов-и-заказчик-не-хочет-тратить-на-их-разработку-время-и-деньги)
  * [Что такое Code Debt и как с ним быть](questions.md/#Что-такое-Code-Debt-и-как-с-ним-быть)
- [VCS](questions.md/#VCS)
  * [Что такое Git Flow](questions.md/#Что-такое-Git-Flow)
  * [Что такое Git Rebase](questions.md/#Что-такое-Git-Rebase)
  * [Что такое Git Cherry pick](questions.md/#Что-такое-Git-Cherry-pick)
  * [Что такое force push](questions.md/#Что-такое-force-push)
  * [Что такое pre-commit check](questions.md/#Что-такое-pre-commit-check)
- [БД](questions.md/#БД)
  * [Что такое транзакция. Какие у неё есть свойства](questions.md/#Что-такое-транзакция-Какие-у-неё-есть-свойства)
  * [Какие команды управления транзакциями вы знаете](questions.md/#Какие-команды-управления-транзакциями-вы-знаете)
  * [Что такое уровни изолированности транзакций. Какие они бывают](questions.md/#Что-такое-уровни-изолированности-транзакций-Какие-они-бывают)
  * [Что такое вложенные транзакции](questions.md/#Что-такое-вложенные-транзакции)
  * [Что такое курсор и зачем он нужен](questions.md/#Что-такое-курсор-и-зачем-он-нужен)
  * [Какая разница между PostgreSQL и MySQL](questions.md/#Какая-разница-между-PostgreSQL-и-MySQL)
  * [Что такое VACUUM в PostgreSQL](questions.md/#Что-такое-VACUUM-в-PostgreSQL)
  * [Что такое EXPLAIN. Какая разница между ним и EXPLAIN ANALYZE](questions.md/#Что-такое-EXPLAIN-Какая-разница-между-ним-и-EXPLAIN-ANALYZE)
  * [Какие виды Join'ов вы знаете, чем они отличаются друг от друга](questions.md/#Какие-виды-Joinов-вы-знаете-чем-они-отличаются-друг-от-друга)
- [Дизайн-интервью](questions.md/#Дизайн-интервью)
  * [План интервью](questions.md/#План-интервью)
  * [1. Сбор требований](questions.md/#1-Сбор-требований)
  * [2. Эстимейты](questions.md/#2-Эстимейты)
  * [3. API](questions.md/#3-API)
  * [4. High-level design](questions.md/#4-High-level-design)
  * [5. Detailed design](questions.md/#5-Detailed-design)
    + [Performance mantras](questions.md/#Performance-mantras)
  * [6. Масштабирование](questions.md/#6-Масштабирование)
    + [Performance bottlenecks](questions.md/#Performance-bottlenecks)
- [Вопросы работодателю](questions.md/#Вопросы-работодателю)
  * [Вопросы HR'у](questions.md/#Вопросы-HRу)
  * [Вопросы для технического собеседования](questions.md/#Вопросы-для-технического-собеседования)
- [Интересные ссылки](questions.md/#Интересные-ссылки)
- [Источники вопросов](questions.md/#Источники-вопросов)
